/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.edu.upc.dew.serviciosmultiples.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
import pe.edu.upc.dew.serviciosmultiples.exception.ServiceException;
import pe.edu.upc.dew.serviciosmultiples.model.Servicio;
import pe.edu.upc.dew.serviciosmultiples.model.Solicitud;
import pe.edu.upc.dew.serviciosmultiples.model.Usuario;
import pe.edu.upc.dew.serviciosmultiples.service.ServicioService;
import pe.edu.upc.dew.serviciosmultiples.service.SolicitudService;
import static pe.edu.upc.dew.serviciosmultiples.util.CalendarFormater.obtenerFechaActualSqlDate;
import static pe.edu.upc.dew.serviciosmultiples.util.CalendarFormater.convertirStringSqlDate;
import static pe.edu.upc.dew.serviciosmultiples.util.Constants.ESTADO_PENDIENTE;
import static pe.edu.upc.dew.serviciosmultiples.util.Constants.SERVICIO_LIST;
import static pe.edu.upc.dew.serviciosmultiples.util.Constants.USUARIO_ACT;
import static pe.edu.upc.dew.serviciosmultiples.util.Constants.FECHA_ACT;

/**
 *
 * @author bcano
 */
public class SolicitudClienteInsController extends MultiActionController {

    private SolicitudService solicitudService;
    private ServicioService servicioService;

    public SolicitudService getSolicitudService() {
        return solicitudService;
    }

    public void setSolicitudService(SolicitudService solicitudService) {
        this.solicitudService = solicitudService;
    }

    public ServicioService getServicioService() {
        return servicioService;
    }

    public void setServicioService(ServicioService servicioService) {
        this.servicioService = servicioService;
    }

    public ModelAndView index(HttpServletRequest request, HttpServletResponse response, Solicitud solicitudForm) throws ServiceException {
        System.out.println("entro indexInsertar");
        HttpSession session = request.getSession();

        request.setAttribute("solicitud", solicitudForm);
        request.setAttribute("serviciosList", session.getAttribute(SERVICIO_LIST));
        request.setAttribute("usuario", session.getAttribute(USUARIO_ACT));
        request.setAttribute("now", session.getAttribute(FECHA_ACT));
        return new ModelAndView("solicitud");
    }

    public ModelAndView insertar(HttpServletRequest request, HttpServletResponse response, Solicitud solicitudForm) {
        HttpSession session = request.getSession();
        try {

            Usuario voUsuario = (Usuario) session.getAttribute(USUARIO_ACT);

            System.out.println("insertar: tiposervicio: " + solicitudForm.getIdServicio() + " costo: " + solicitudForm.getCostoSolicitud()
                    + " problema: " + solicitudForm.getProblema() + " fecha: " + solicitudForm.getStrFechaSolicitud() + " horas: " + solicitudForm.getHoras());

            Servicio servicio = new Servicio();
            servicio.setIdServicio(Integer.parseInt(solicitudForm.getIdServicio()));
            Usuario usuario = new Usuario();
            usuario.setIdUsuario(voUsuario.getIdUsuario());

            solicitudForm.setFechaSolicitud(convertirStringSqlDate(solicitudForm.getStrFechaSolicitud()));
            solicitudForm.setServicio(servicio);
            solicitudForm.setUsuario(usuario);
            solicitudForm.setEstado(ESTADO_PENDIENTE);
            solicitudForm.setUsuCreacion(voUsuario.getUserName());
            solicitudForm.setFechaCreacion(obtenerFechaActualSqlDate());

            boolean validaInsert = solicitudService.validarDobleSolicitud(solicitudForm);
            if (!validaInsert) {
                solicitudService.insertarSolicitud(solicitudForm);

                request.setAttribute("solicitud", solicitudForm);
                return new ModelAndView("redirect:/solicitudCliente.htm");
            }
            String mensageError = "solicitud de servicio ya se ingreso en la fecha indicada";
            request.setAttribute("mensaje", mensageError);
        } catch (ServiceException ex) {
            System.err.println(ex.toString());
        } catch (Exception ex) {
            System.err.println(ex.toString());
        }

        request.setAttribute("solicitud", solicitudForm);
        request.setAttribute("serviciosList", session.getAttribute(SERVICIO_LIST));
        request.setAttribute("usuario", session.getAttribute(USUARIO_ACT));
        request.setAttribute("now", session.getAttribute(FECHA_ACT));
        return new ModelAndView("solicitud");
    }
}
